import PyInstaller.__main__
import os
import sys

# 获取当前目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 图标路径
icon_path = os.path.join(current_dir, 'icon.ico')

# 需要排除的模块（移除了datetime和其他必要模块）
excludes = [
    'unittest', 'pydoc', 'doctest',
    'py', 'pytest', '_pytest',
    'pkg_resources'
]

# PyInstaller参数
params = [
    'replace_qr.py',  # 主程序
    '--name=二维码替换工具',  # 程序名称
    '--icon=' + icon_path,  # 图标
    '--noconsole',  # 不显示控制台窗口
    '--add-data=icon.ico;.',  # 添加图标文件
    
    # 添加必要的隐式导入
    '--hidden-import=win32com.client',
    '--hidden-import=pythoncom',
    '--hidden-import=pywintypes',
    '--hidden-import=win32com.client.gencache',
    '--hidden-import=PIL._tkinter_finder',
    '--hidden-import=tkinter',
    '--hidden-import=tkinter.filedialog',
    '--hidden-import=tkinter.messagebox',
    '--hidden-import=win32timezone',  # 添加这个重要的导入
    
    '--onefile',  # 打包成单个文件
    '--clean',  # 清理临时文件
    '--uac-admin',  # 请求管理员权限
    '--version-file=version.txt',  # 版本信息文件
    
    # UPX压缩配置
    '--upx-dir=upx',  # UPX工具目录
    '--upx-exclude=vcruntime140.dll',  # 不压缩特定DLL
    '--upx-exclude=python*.dll',
    '--upx-exclude=ucrtbase.dll',
    '--upx-exclude=msvcp140.dll',
    
    # 优化选项
    '--strip',  # 减小二进制大小
    
    # 排除不需要的模块
    *['--exclude-module=' + m for m in excludes],
    
    # 优化级别
    '--optimize=2'  # 使用Python优化
]

def check_upx():
    """检查UPX是否存在，不存在则下载"""
    upx_dir = os.path.join(current_dir, 'upx')
    if not os.path.exists(upx_dir):
        import urllib.request
        import zipfile
        import shutil
        
        print("正在下载UPX...")
        upx_zip = os.path.join(current_dir, 'upx.zip')
        
        try:
            # 下载UPX
            urllib.request.urlretrieve(
                'https://github.com/upx/upx/releases/download/v4.2.1/upx-4.2.1-win64.zip',
                upx_zip
            )
            
            # 解压UPX
            with zipfile.ZipFile(upx_zip, 'r') as zip_ref:
                zip_ref.extractall(current_dir)
            
            # 重命名目录
            extracted_dir = os.path.join(current_dir, 'upx-4.2.1-win64')
            if os.path.exists(upx_dir):
                shutil.rmtree(upx_dir)
            os.rename(extracted_dir, upx_dir)
            
            # 清理下载的zip文件
            os.remove(upx_zip)
            print("UPX下载完成")
            
        except Exception as e:
            print(f"下载UPX时出错: {str(e)}")
            if os.path.exists(upx_zip):
                os.remove(upx_zip)
            return False
    return True

# 检查并下载UPX
print("检查UPX...")
if check_upx():
    print("UPX准备就绪")
else:
    print("警告: UPX未能正确配置，将继续打包但不使用UPX压缩")
    # 移除UPX相关参数
    params = [p for p in params if not p.startswith('--upx')]

# 执行打包
print("开始打包...")
PyInstaller.__main__.run(params)
print("打包完成！") 